package com.cskaoyan._19collection._04api;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * @author Macro_Ray
 * @since 2024/3/29 15:21
 */
public class Demo4Iterator {
    @Test
    public void test1() {

    }


    @Test
    public void test4() {
        // remove 删除元素 删除刚刚遍历过的元素
        // 迭代器本身不保存集合中的数据。
        // 如果需要修改集合中的元素，可以使用迭代器来遍历集合，并对集合中的元素进行修改。
        // 迭代器的 remove() 方法可以删除迭代器指向的当前元素。

        // 如果需要删除其他元素，只能使用集合的 remove() 方法。


        // remove只能遍历一次 删除一次

    }

    @Test
    public void test7() {
        // size 是根据集合的实际大小来返回的。
        Collection<String> coillection = new ArrayList<>();
        coillection.add("a");
        coillection.add("b");
        System.out.println("size: " + coillection.size());
    }


    @Test
    public void test8() {
        // 并发修改异常问题
        Collection<String> collection = new ArrayList<>();
        collection.add("zs");
        collection.add("ls");
        collection.add("wu");

        // 迭代器的主要作用：遍历
        // 如果在使用迭代器的过程中，原本的元素变了，那么迭代器就会抛出 ConcurrentModificationException 异常。
        Iterator<String> iterator = collection.iterator();
        int countZs = 0;
        /*while (iterator.hasNext()) {
            String str = iterator.next(); // 并发修改异常
            if ("zs".equals(str)) {
                countZs++;
            }
            collection.remove("zs");
        }*/
        System.out.println(countZs);


        // 解决方案：
        // 1. 关闭迭代器，重新获取一个新的迭代器。
        // 2. 使用 ConcurrentHashMap 或者 Collections.synchronizedXXX() 方法包装集合。

    }


}
